package persistencia.dominio.testEv;

import persistencia.dominio.*;
import persistencia.Persistencia;
import server.Singleton;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;

 
public class CreacionDeTablas {
  static Persistencia persistencia = null;
  static Connection conexionSQL = null;
  //Nuevas entidades que necesitan que se les cree su tabla en la BD
  static Autoexamen autoexamen = null;
  static AutoexamenFinalizado autoexFin = null;
  static Cuestionario cuestionario = null;
  static CuestionarioFinalizado cuestFin = null;
  static Examen examen = null;
  static ExamenFinalizado exFin = null;
  static Frase frase = null;
  static Puntuacion puntuacion = null;
  static PreguntaEx pregunta = null;
  static RespuestaEx respuesta = null;
  static PAsociacion asoc = null;
  static PCompletarFrase compFr = null;
  static PRespuestaAbierta rtaAbierta = null;
  static PRespuestaCerrada rtaCerrada = null;
  static POpcionMultiple opcMult = null;
  static PVerdaderoFalso verdFalso = null;
  static PNumericaCalculada numCalc = null;
  static Evaluacion evaluacion = null;
  static EvaluacionFinalizada evFin = null;
  static EvaluacionFinalizadaConRespuestas evFinRespuestas = null;
  
  static public void initPersistencia(){
	  persistencia = new Persistencia();
	  persistencia.crearTransaccion();
	  //REGISTER DRIVER
	  try {
	      Driver d = (Driver)Class.forName(Singleton.driver).newInstance();
	  }catch (Exception e){
	      System.out.println(e);
	  }

	  //GET CONNECTION
	  conexionSQL=null;
	  try{
	      conexionSQL = DriverManager.getConnection(Singleton.url,Singleton.userName,Singleton.password);
	  }catch(Exception e){
	      System.out.println(e);
	  }
  }

  static public boolean commit(){
	 try {
		  persistencia.commit();
		  conexionSQL.close();
	      return true;
	  }catch(Exception ex){
		  ex.printStackTrace();
		  persistencia.rollback();
		  try{
		     conexionSQL.close();
		  }catch(SQLException ex1){
		      ex1.printStackTrace();
		      return false;
		  }
		     return false;
	  }
  }

  static public boolean rollback(){
	 try {
		 persistencia.rollback();
		 conexionSQL.close();
		 return true;
	 }catch (Exception ex){
		 ex.printStackTrace();
		 return false;
	 }
  }

  public static void cargarBaseDeDatos(){
	  try{
		  initPersistencia();
		  System.out.println("=======================INICIO LA CREACION DE TABLAS==========================");
		  creacionDeTablas();
		  System.out.println("======================TERMINO LA CREACION DE TABLAS==========================");
		  commit();
	  }catch(Exception ee){
			ee.printStackTrace();
			rollback();
	  }
  }

  private static void creacionDeTablas(){
	  puntuacion = new Puntuacion();
	  persistencia.hacerPersistente(puntuacion);
	  Set punt=new HashSet();
	  punt.add(puntuacion);
	  
	  pregunta = new PreguntaEx();
	  pregunta.setPuntuacion(punt);
	  persistencia.hacerPersistente(pregunta);
	  Set preg=new HashSet();
	  preg.add(pregunta);
	  
	  evaluacion = new Evaluacion();
	  evaluacion.setPreguntas(preg);
	  persistencia.hacerPersistente(evaluacion);
	  
	  autoexamen = new Autoexamen();
	  persistencia.hacerPersistente(autoexamen);

	  examen = new Examen();
	  persistencia.hacerPersistente(examen);
	   
	  cuestionario = new Cuestionario();
	  persistencia.hacerPersistente(cuestionario);
	  	  
	  frase = new Frase();
	  persistencia.hacerPersistente(frase);
	  Set fr=new HashSet();
	  fr.add(frase);
	  
	  respuesta = new RespuestaEx();
	  respuesta.setConjRespuesta(fr);
	  persistencia.hacerPersistente(respuesta);
	  Set resp= new HashSet();
	  resp.add(respuesta);
	  
	  evFin = new EvaluacionFinalizada();
	  persistencia.hacerPersistente(evFin);
	  
	  evFinRespuestas = new EvaluacionFinalizadaConRespuestas();
	  evFinRespuestas.setRespuestas(resp);
	  persistencia.hacerPersistente(evFinRespuestas);
	  
	  autoexFin = new AutoexamenFinalizado();
	  persistencia.hacerPersistente(autoexFin);
	  
	  exFin = new ExamenFinalizado();
	  persistencia.hacerPersistente(exFin);

	  cuestFin = new CuestionarioFinalizado();
	  persistencia.hacerPersistente(cuestFin);
	  
	  asoc = new PAsociacion();
	  asoc.setParejaA(fr);
	  asoc.setParejaB(fr);
	  persistencia.hacerPersistente(asoc);

	  compFr = new PCompletarFrase();
	  compFr.setBlancos(fr);
	  persistencia.hacerPersistente(compFr);

	  rtaAbierta = new PRespuestaAbierta();
	  persistencia.hacerPersistente(rtaAbierta);

	  rtaCerrada = new PRespuestaCerrada();
	  persistencia.hacerPersistente(rtaCerrada);

	  opcMult = new POpcionMultiple();
	  opcMult.setOpciones(fr);
	  persistencia.hacerPersistente(opcMult);

	  verdFalso = new PVerdaderoFalso();
	  persistencia.hacerPersistente(verdFalso);

	  numCalc = new PNumericaCalculada();
	  persistencia.hacerPersistente(numCalc);

	  
  }

  public static void main(String[] args){
                CreacionDeTablas creacionDeTablas = new CreacionDeTablas();
                creacionDeTablas.cargarBaseDeDatos();
  }
}